/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2022-05-11
 * Time:21:22
 */
/*public class Date {
    public int year;
    public int month;
    public int day;
    // 构造方法：
    // 名字与类名相同，没有返回值类型，设置为void也不行
    // 一般情况下使用public修饰
    // 在创建对象时由编译器自动调用，并且在对象的生命周期内只调用一次

    public Date(){
        System.out.println("不带参数的构造方法");
    }

    public Date(int year, int month, int day){
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("Date(int,int,int)方法被调用了");
    }
    public void printDate(){
        System.out.println(year + "-" + month + "-" + day);
    }
    public static void main(String[] args) {
        // 此处创建了一个Date类型的对象，并没有显式调用构造方法
        Date d = new Date(); // 输出Date(int,int,int)方法被调用了
        d.printDate(); // 2021-6-9
    }
}*/

/*
public class Date {
    public int year;
    public int month;
    public int day;

    public void setYear(int year) {
        this.year = year;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public void printDate() {
        System.out.println(year + "-" + month + "-" + day);
    }

    public static void main(String[] args) {
        // 如果编译器会生成，则生成的构造方法一定是无参的
        // 则此处创建对象是可以通过编译的
        // 但实际情况是：编译期报错
        Date d = new Date();
        d.printDate();
    }
}
*/
/*
Error:(26, 18) java: 无法将类 extend01.Date中的构造器 Date应用到给定类型;
需要: int,int,int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
*/
public class Date {
	private int year;
	private int month;
	private int day;
	// 无参构造方法--内部给各个成员赋值初始值，该部分功能与三个参数的构造方法重复
	// 此处可以在无参构造方法中通过this调用带有三个参数的构造方法
	// 但是this(1900,1,1);必须是构造方法中第一条语句
	public Date(){
		//System.out.println(year); 注释取消掉，编译会失败
		this(2022, 5, 11);
		//this.year = 1900;
		//this.month = 1;
		this.day = 1;
	}

	public void setYear(int year){
		this.year=year;
	}
	public int getYear(){
		return this.year;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		this.month = month;
	}

	public int getDay() {
		return day;
	}

	public void setDay(int day) {
		this.day = day;
	}

	// 带有三个参数的构造方法
	public Date(int year, int month, int day) {

		this.year = year;
		this.month = month;
		this.day = day;
	}
	public void printDate() {
		System.out.println(year + "-" + month + "-" + day);
	}

    public static void main(String[] args) {
        Date date=new Date();
		date.printDate();
    }
}

